import { ref } from "vue";
import { defineStore } from "pinia";

export const useUserStore = defineStore(
  "user",
  () => {
    // 用户信息
    const userInfo = ref({
      id: -1,                          // 用户ID
      username: "",                    // 用户名
      profilePicture: "",              // 用户头像 URL
      backgroundPicture: "",           // 背景图片 URL
      bio: "",                         // 个人简介
      email: "",                       // 用户邮箱
      gender: "",                      // 性别
      isEmailVerified: false,          // 邮箱是否验证
      level: 1,                        // 用户等级
      postCount: 0,                    // 发帖数
      novelCount: 0,                   // 小说数
      coins: 0,                        // 虚拟货币数量
      isVip: false,                    // 是否为VIP会员
    });

    // token
    const token = ref("");

    // 登录状态
    const loginstatus = ref(false);

    // 用户关注和粉丝列表
    const followlist = ref([]);  // 关注列表
    const fanlist = ref([]);     // 粉丝列表

    // 用户的阅读进度，存储每本书的当前章节
    // 格式：{ bookId: number, chapterId: number }
    const readingProgress = ref<Record<number, number>>({});

    // 是否在纯净模式下阅读
    const isPureRead = ref(false)

    // 用户消息列表
    const messages = ref<{ id: number, content: string }[]>([]); // 添加消息列表

    // 设置用户当前阅读的书籍和章节
    const setReadingProgress = (bookId: number, chapterId: number) => {
      readingProgress.value[bookId] = chapterId;
    };

    // 获取用户当前阅读的章节
    const getReadingProgress = (bookId: number): number | null => {
      return readingProgress.value[bookId] || null;
    };

    // 更新用户信息
    const updateUserInfo = (newUserInfo: Partial<typeof userInfo.value>) => {
      userInfo.value = { ...userInfo.value, ...newUserInfo };
    };

    // 删除用户消息
    const deleteMessage = (messageId: number) => {
      messages.value = messages.value.filter(message => message.id !== messageId);
    };

    // 退出登录
    const logout = () => {
      userInfo.value = {
        id: -1,
        username: "",
        profilePicture: "",
        backgroundPicture: "",
        bio: "",
        email: "",
        gender: "",
        isEmailVerified: false,
        level: 1,
        postCount: 0,
        novelCount: 0,
        coins: 0,
        isVip: false,
      };
      token.value = "";
      loginstatus.value = false;
      followlist.value = [];
      fanlist.value = [];
      readingProgress.value = {};
      messages.value = [];
    };

    return {
      userInfo,
      token,
      loginstatus,
      followlist,
      fanlist,
      readingProgress,
      messages,             // 暴露消息列表
      setReadingProgress,
      getReadingProgress,
      updateUserInfo,       // 提供更新用户信息的方法
      deleteMessage,        // 提供删除消息的方法
      logout,               // 提供退出登录的方法
      isPureRead,
    };
  },
  {
    persist: true, // 持久化存储用户数据，包括阅读进度
  }
);
